#ifndef ESTADODEREALIZACIONDEPARTIDA_H_
#define ESTADODEREALIZACIONDEPARTIDA_H_

#include "EstadoDelJuego.h"
#include "JuegoServerImp.h"
#include "SubestadoDeRealizacionDePartida.h"


class EstadoDeRealizacionDePartida : public EstadoDelJuego
{
private:
	JuegoServerImp* juego;
	SubestadoDeRealizacionDePartida* estadoDeRefuerzoYreubicacion;
	SubestadoDeRealizacionDePartida* estadoDeAtaque;
	SubestadoDeRealizacionDePartida* estadoDeFortificacionDeUnidades;
	
	SubestadoDeRealizacionDePartida* estado;
public:
	EstadoDeRealizacionDePartida(JuegoServerImp* juego);
		
	void colocarEjercitos(Jugador* jugador, Territorio* territorio, unsigned int cantidadDeEjercitos) {
		estado->colocarEjercitos(jugador,territorio,cantidadDeEjercitos);
	}
		
	void realizarAtaque(Ataque* ataque) {
		estado->realizarAtaque(ataque);
	}
	
	void reforzarEjercitos(Jugador* jugador) {
		estado->reforzarEjercitos(jugador);
	}
		
	void tirarDados(Jugador* jugador, unsigned int cantidadDeDados) {
		estado->tirarDados(jugador,cantidadDeDados);
	}
	
	void moverEjercitos(Jugador* jugador, Territorio* origen, Territorio* destino, unsigned int cantidadDeEjercitos) {
		estado->moverEjercitos(jugador,origen,destino,cantidadDeEjercitos);
	}
	
	void pasar(Jugador* jugador) {
		estado->pasar(jugador);
	}
	
	void setEstado(SubestadoDeRealizacionDePartida* estado) {
		this->estado = estado;
		this->juego->setEstado(this);
	}
	SubestadoDeRealizacionDePartida* getEstadoDeAtaque() {
		return estadoDeAtaque;
	}
	SubestadoDeRealizacionDePartida* getEstadoDeFortificacionDeUnidades() {
		return estadoDeFortificacionDeUnidades;
	}
	SubestadoDeRealizacionDePartida* getEstadoDeRefuerzoYReubicacion() {
		return estadoDeRefuerzoYreubicacion;
	}
	
	JuegoServerImp* getJuego();
	
	string toString();
	
	virtual ~EstadoDeRealizacionDePartida();
};

#endif /*ESTADODEREALIZACIONDEPARTIDA_H_*/
